/*
 * 默认在html已经引入了  crypto-js.js  文件
 * 或者npm install crypto-js --save 安装
 * 然后使用import CryptoJS from "crypto-js"
 * 加密 解密
 */
import CryptoJS from "crypto-js"

const getKeyHex = () => CryptoJS.enc.Latin1.parse("yuduchen"); // 私钥自己指定
const getIvHex = () => CryptoJS.enc.Latin1.parse("12584"); // 私钥自己指定

/**
 * 加密
 * @param {String} key
 * @param {String} cryptoCode
 * @returns {string}
 */
export const getEncrypt = key => {
    let keyHex = getKeyHex();
    let ivHex = getIvHex();
    return CryptoJS.AES.encrypt(key, keyHex, {
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.ZeroPadding,
        iv: ivHex
    });
}

/**
 * 解密
 * @param data
 * @returns {string}
 */
export const getDecrypt = data => {
    let keyHex = getKeyHex();
    let ivHex = getIvHex();
    return CryptoJS.AES.decrypt(data, keyHex, {
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.ZeroPadding,
        iv: ivHex
    });
}

/**
 * 对base64数据解密  先解析base64，在做解密
 * @param {String} data
 * @returns {string}
 */
export const getDecryptByBase64 = data => {
    //将数据先base64还原，再转为utf8数据
    let decData = CryptoJS.enc.Base64.parse(data).toString(CryptoJS.enc.Utf8);
    //解密数据
    let decJson = getDecrypt(decData).toString(CryptoJS.enc.Utf8);
    return decJson

    /*let parsedWordArray = CryptoJS.enc.Base64.parse(data).toString(CryptoJS.enc.Utf8);
    return getDecrypt(parsedWordArray);*/
}

export const getEncryptToBase64 = (key, cryptoCode) => {
    //加密数据
    let encJson = getEncrypt(key).toString();
    //对加密数据进行base64处理, 原理：就是先将字符串转换为utf8字符数组，再转换为base64数据
    let encData = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(encJson));
    return encData


    /*try {
        key = JSON.stringify(key);
    } catch (e) {
        console.warn(e);
    }
    let encryptStr = getEncrypt(key, cryptoCode);
    let wordArray = CryptoJS.enc.Utf8.parse(encryptStr);
    return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(wordArray));*/
}
